home *** CD-ROM | disk | FTP | other *** search
/ Network CD 2 / Network CD - Volume 2.iso / programs / internet / tcp / amitcp / amitcp-src-22.lha / AmiTCP-2.2 / src / appl / ls / user.c < prev   
Encoding:
C/C++ Source or Header  |  1993-09-17  |  2.0 KB  |  122 lines

  1. RCS_ID_C "$Id: user.c,v 1.1 93/09/17 06:25:47 ppessi Exp $";
  2. /*
  3.  * user.c
  4.  *
  5.  * Get group and user names for their ids
  6.  *
  7.  * Author: ppessi <Pekka.Pessi@hut.fi>
  8.  *
  9.  * Copyright (c) 1993 Pekka Pessi
  10.  *
  11.  * Created      : Wed May 26 09:21:59 1993 ppessi
  12.  * Last modified: Fri Sep 17 06:02:10 1993 ppessi
  13.  *
  14.  */
  15.  
  16. #include <exec/lists.h>
  17. #include <exec/nodes.h>
  18. #include <dos/var.h>
  19.  
  20. #if __SASC
  21. #include <proto/exec.h>
  22. #include <proto/dos.h>
  23. #else
  24. #error Unsupported Compiler.
  25. #endif
  26.  
  27. #include <pwd.h>
  28. #include <grp.h>
  29.  
  30. #include <stdlib.h>
  31. #include <string.h>
  32.  
  33. static void wtoa(UWORD w, char a[9]);
  34.  
  35. /*
  36.  * user
  37.  *      Return user login for given uid. 
  38.  *      Return also group ID if specified.
  39.  *      Names have space filled up to 8 chars.
  40.  *      Use a cache of 1 user
  41.  */
  42. UBYTE *
  43. user(UWORD uid)
  44. {
  45.   static UBYTE retval[9];        /* buffer to trash */
  46.   static struct passwd *user = NULL;
  47.  
  48.   /* Same as last one? */
  49.   if (user && user->pw_uid == uid) {
  50.     return retval;
  51.   }
  52.  
  53.   if (user = getpwuid(uid)) {
  54.     int i;
  55.     for (i = 0; i < 8 && (retval[i] = user->pw_name[i]); i++)
  56.       ;
  57.     for (; i < 8; retval[i++] = ' ')
  58.       ;
  59.     retval[8] = '\0';
  60.   } else {
  61.     wtoa(uid, retval);
  62.   }
  63.  
  64.   return retval;
  65. }
  66.  
  67. UBYTE * 
  68. group(UWORD gid)
  69. {
  70.   static UBYTE retval[9];        
  71.   static struct group *group = NULL;
  72.  
  73.   /* Same as last one? */
  74.   if (group && group->gr_gid == gid) {
  75.     return retval;
  76.   }
  77.  
  78.   if (group = getgrgid(gid)) {
  79.     int i;
  80.     for (i = 0; i < 8 && (retval[i] = group->gr_name[i]); i++)
  81.       ;
  82.     for (; i < 8; retval[i++] = ' ')
  83.       ;
  84.     retval[8] = '\0';
  85.   } else {
  86.     wtoa(gid, retval);
  87.   }
  88.  
  89.   return retval;
  90. }
  91.  
  92. /* 
  93.  * wtoa
  94.  */
  95. static void
  96. wtoa(UWORD w, char a[9])
  97. {
  98.   short i;
  99.   char b[8];
  100.  
  101.   for (i = 0; i < 8; i++) 
  102.     a[i] = ' ';
  103.   a[8] = '\0';
  104.  
  105.   if (w == 0) {
  106.     a[0] = '0';
  107.   } else {
  108.     b[5] = '\0';
  109.     b[4] = w % 10 + '0'; w /= 10;
  110.     b[3] = w % 10 + '0'; w /= 10;
  111.     b[2] = w % 10 + '0'; w /= 10;
  112.     b[1] = w % 10 + '0'; w /= 10;
  113.     b[0] = w + '0';
  114.  
  115.     for (i = 0; b[i] == '0'; i++)
  116.       ;
  117.     for (; i < 5; i++) 
  118.       *a++ = b[i];
  119.   }
  120. }
  121.  
  122.